package com.heima.article.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.heima.article.dtos.ApArticleDto;
import com.heima.article.dtos.ApArticleInfoDto;
import com.heima.article.dtos.CollectionBehaviorDto;
import com.heima.article.pojos.ApArticle;
import com.heima.article.pojos.ArticleHomeDto;
import com.heima.article.vos.ArticleInfoVo;
import com.heima.behavior.BehaviorDto;
import com.heima.behavior.ReadBehaviorDto;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * @author 郭文杰
 * @description 针对表【ap_article(文章信息表，存储已发布的文章)】的数据库操作Service
 * @createDate 2023-12-02 11:42:51
 */
public interface ApArticleService extends IService<ApArticle> {

    /**
     * 加载文章
     *
     * @param articleHomeDto 条件参数
     * @param type           1加载最新 2加载更多 3加载首页
     * @return 文章数据
     */
    List<ApArticle> loadArticle(ArticleHomeDto articleHomeDto, String type);

    /**
     * 加载每个频道首页的热点文章数据<hr>
     * <strong>注: 当redis中有数据就从redis获取, 否则就从数据库中获取</strong>
     *
     * @param articleHomeDto 条件参数
     * @param type           加载文章类型 1加载最新 2加载更多 3加载首页
     * @return 文章数据
     */
    List<ApArticle> loadArticleByDbOrRedis(ArticleHomeDto articleHomeDto, String type);

    /**
     * 保存或修改文章
     *
     * @param apArticleDto 文章信息Dto
     * @return 返回的文章id
     */
    long saveOrUpdateArticle(ApArticleDto apArticleDto);

    /**
     * 删除app端文章
     *
     * @param id 文章id
     */
    void delArticle(Long id);

    /**
     * 上下架app端文章
     *
     * @param articleId 文章id
     * @param enable    是否上下架 0下架 1上架
     */
    void downOrUp(@RequestParam("articleId") Long articleId, @RequestParam("enable") Short enable);

    /**
     * 文章点赞
     *
     * @param behaviorDto 前端dto
     */
    void likeBehavior(BehaviorDto behaviorDto, Long userId);

    /**
     * 文章阅读
     *
     * @param readBehaviorDto 前端dto
     */
    void readBehavior(ReadBehaviorDto readBehaviorDto,Long userId);

    /**
     * 文章不喜欢
     *
     * @param behaviorDto 前端dto
     * @param userId      用户id
     */
    void unLikeBehavior(BehaviorDto behaviorDto, Long userId);

    /**
     * 文章收藏与取消
     *
     * @param collectionBehaviorDto 前端dto
     */
    void collectionBehavior(CollectionBehaviorDto collectionBehaviorDto);

    /**
     * 某篇文章的行为状态回显 <br>
     * 状态回显:当用户对某一篇文章点赞 收藏 关注后,退出后再点击这篇文章把这些状态回显给前端
     *
     * @param apArticleInfoDto 前端dto
     * @return 返回结果
     */
    Map<String,Boolean> loadArticleBehavior(ApArticleInfoDto apArticleInfoDto);
}
